from django.shortcuts import render
from django.template.defaultfilters import title
from django.views.generic import TemplateView # 导入TemplateView数据显示视图类
from commodity.models import *                # 导入所有数据模型

# Create your views here.
def indexView(request):
    title = '首页'  # 定义首页变量

    # 必抢栏目
    commodityinfos = CommodityInfos.objects.all()  # 查询所有商品
    commodityinfos = commodityinfos.order_by('-sold')[:8]  # 将所有商品以销量进行降序排序，并查询前8名

    # ‘服饰‘
    types = Types.objects.all()  # 查询所有类别
    cl = [i.seconds for i in types if i.firsts == '儿童服饰']  # 查询类别中一级类别等于儿童服饰的所有二级类别数据
    clothes = CommodityInfos.objects.filter(
        types__in=cl).order_by('-sold')[:5]  # 查询商品类别为cl的说有商品信息，并以降序排序，并查询前5名

    # ’食品‘
    fl = [i.seconds for i in types if i.firsts == '奶粉辅食']
    food = CommodityInfos.objects.filter(
        types__in=fl).order_by('-sold')[:5]

    # ’用品‘
    gl = [i.seconds for i in types if i.firsts == '儿童用品']
    goods = CommodityInfos.objects.filter(
        types__in=gl).order_by('-sold')[:5]

    # 设置反回值
    return render(request, 'index.html', locals())
    # locals()的作用是返回当前作用域的局部变量

# 使用视图类实现商城首页
class indexClassView(TemplateView):
    template_name = 'index.html'  # 设置模板文件的文件名
    template_engine = None                                      # 解析模板文件的模板引擎
    content_type = None                                         # 设置响应内容的数据格式，，一般情况下使用默认值即可
    extra_context = {'title':'首页','classContent':''}           # 为模板文件设置额外变量

    # 重新定义模板上下文的获取方式
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)            # 获取extra_context中的值并保存到context中，super()用于调用直接父类方法

        # 必抢栏目
        context['commodityinfos'] = CommodityInfos.objects.order_by('-sold').all()[:8]

        # ‘服饰‘
        types = Types.objects.all()
        cl = [i.seconds for i in types if i.firsts == '儿童服饰']
        context['clothes'] = CommodityInfos.objects.filter(types__in = cl).order_by('-sold').all()[:5]

        # ’食品‘
        fl = [i.seconds for i in types if i.firsts == '奶粉辅食']
        context['food'] = CommodityInfos.objects.filter(types__in = fl).all()[:5]

        # ’用品‘
        gl = [i.seconds for i in types if i.firsts == '儿童用品']
        context['goods'] = CommodityInfos.objects.filter(types__in = gl).all()[:5]

        return context                                         # 将获取到的数据以字典的形式添加到context

    # 定义http的get请求处理方法 如果路由设有变量，可以从kwargs获取
    def get(self,request,*args,**kwargs):
        pass
        context = self.get_context_data(**kwargs)
        return render(request,self.template_name,context)

    # 定义http的post请求处理方法
    def post(self,request,*args,**kwargs):
        pass
        context = self.get_context_data(**kwargs)
        return render(request,self.template_name,context)